/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import modele.combinaison.Combinaison;
import exception.CombinaisonInconnue;
import java.util.Map;
import java.util.Map.Entry;

/**
 * Classe abstraite AbstractJoeur qui rassemble toutes les attributs et méthodes
 * communes à n'importe quel type de joueur (réel ou IA)
 * @author Florian MININ & Khémon BEH
 */
public abstract class AbstractJoueur {

    /*
     * Attributs de la classe AbstractJoueur
     */
    protected String nom;
    protected int numJoueur;
    protected boolean joue;
    protected FeuilleScore feuilleScore;
    
    public AbstractJoueur(int _numJoueur){
        nom = "";
        numJoueur = _numJoueur;
        joue = false;
        feuilleScore = new FeuilleScore();
    }

    /****Getteurs et Setteurs *********/

    public boolean getJoue(){
        return joue;
    }

    public void setJoue(boolean b) {
        joue = b;
    }

    public int getScore() {
        return feuilleScore.scoreTotal();
    }


    public void setNom(String _nom){
        nom = _nom;
    }

    public int getNumJoueur() {
        return numJoueur;
    }
    
    public String getNom(){
        return nom;
    }

    public boolean aFiniDeJoueur(){
        return feuilleScore.getNbCombiRestante() == 0;
    }


    /**
     * Méthode qui sert à inscrire dans la feuille de score du joueur
     * la valeur du score relative à la combinaison que le joueur a choisi
     * @param combi
     * @param map
     * @return int le score total du joueur mis à jour
     * @throws CombinaisonInconnue
     */
    public int MAJFeuilleScore(String combi, Map<Integer, Integer> map) throws CombinaisonInconnue {
        //On récupère le couple combi/score correspondant à la combi joué de la feuille du joueur
        Entry<Combinaison,Integer> couple = feuilleScore.getCombinaison(combi);
        Combinaison combinaison = couple.getKey();
        //on met à jour la feuille de score en ajoutant à la combinaison
        //la valeur correspondante via la méthode recupereValeurDes()
        combinaison.recupereValeurDes(map);
        //La combinaison calcule le score réussi avec les valeurs
        //on récupère la valeur
        couple.setValue(combinaison.calculeScoreCombinaison());
        //On calcule 
        feuilleScore.calculeScore();
        //On décrémente le nombre de combis qu'il reste à faire au joueur
        feuilleScore.decrementeCombisRestante();
        //On retourne le score total mis à jour
        return feuilleScore.scoreTotal();
    }


}
